package com.cx.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * 相当于jdbcUtil获取连接
 */
public class SqlSessionUtil {


    private static SqlSessionFactory sqlSessionFactory;

    public static SqlSessionFactory getSqlSessionFactory() {
        //防止线程不安全
        synchronized (SqlSessionUtil.class) {
            if (sqlSessionFactory != null) {
                return sqlSessionFactory;
            }
            String resource = "mybatis-config.xml";
            InputStream inputStream;

            try {
                //从编译路径下读取mybatis config.xml文件获得输入字节流对象
                //.java文件经过编译之后生成.class才能载入内存运行
                //因为项目的src路径下的东西在编译后，全部都会到编译路径去
                //所以对于src路径，可以把他当成编译路径去理解
                inputStream = Resources.getResourceAsStream(resource);
                //读取mybatis配置文件的内容，进行mybatis环境的配置，最终根据配置，创建一个SqlSession的工厂
                //mybatis-config.xml:xml文件解析有两种方式1.DOM  2.SAX解析
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
            return sqlSessionFactory;
        }
    }

    /**
     * SqlSession-》相当于数据库连接
     * @return
     */
    public static SqlSession openSqlSession() {
        if (sqlSessionFactory == null) {
            getSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}
